package net.sudot.commons.pagination;


import net.sudot.commons.utils.ResponseMessage;

import java.io.Serializable;
import java.util.List;

/**
 * 查询返回的每一页的数据封装接口
 *
 * @param <E> 实体
 * @author 唐家林
 * @time 2016年3月30日
 */
public class Page<E> implements Serializable {
    /** */
    private static final long serialVersionUID = 1L;

    /** 当前页码 */
    protected int pageNum;
    /** 记录总数 */
    protected int rows;
    /** 记录总数 */
    protected long total;
    /** 统计总数 */
    protected int footer;

    /** 响应客户端的数据集 */
    protected List<E> records;

    /** 响应客户端的统计 */
    protected List<E> footerRecords;

    public List<E> getFooterRecords() {
        return footerRecords;
    }

    public Page<E> setFooterRecords(List<E> footerRecords) {
        this.footerRecords = footerRecords;
        return this;
    }

    public int getRows() {
        return rows;
    }

    public Page<E> setRows(int rows) {
        this.rows = rows;
        return this;
    }

    public int getFooter() {
        return footer;
    }

    public Page<E> setFooter(int footer) {
        this.footer = footer;
        return this;
    }

    public int getPage() {
        return pageNum;
    }

    public Page<E> setPage(int pageNum) {
        this.pageNum = pageNum;
        return this;
    }

    public long getTotal() {
        return total;
    }

    public Page<E> setTotal(long total) {
        this.total = total;
        return this;
    }

    public List<E> getRecords() {
        return records;
    }

    public Page<E> setRecords(List<E> records) {
        this.records = records;
        return this;
    }

    public ResponseMessage toResponseMessage() {
        return PageUtills.getResponseMessage(this, PageUtills.PageType.EASY_UI);
    }

    @Override
    public String toString() {
        return toString(PageUtills.PageType.EASY_UI);
    }

    public String toStringAtDataTables() {
        return this.toString(PageUtills.PageType.DATA_TABLES);
    }

    public String toString(PageUtills.PageType pageType) {
        return PageUtills.getStringResponse(this, pageType);
    }

}
